package org.xqp.pet.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.xqp.basic.service.impl.BaseServiceImpl;
import org.xqp.basic.util.DistanceUtil;
import org.xqp.basic.util.PageList;
import org.xqp.basic.util.Point;
import org.xqp.org.domain.Employee;
import org.xqp.org.domain.Shop;
import org.xqp.org.mapper.EmployeeMapper;
import org.xqp.org.mapper.ShopMapper;
import org.xqp.pet.domain.Pet;
import org.xqp.pet.domain.SearchMasterMsg;
import org.xqp.pet.mapper.SearchMasterMsgMapper;
import org.xqp.pet.query.SearchMasterMsgQuery;
import org.xqp.pet.service.IPetService;
import org.xqp.pet.service.ISearchMasterMsgService;
import org.xqp.user.domain.Logininfo;
import org.xqp.user.domain.User;
import org.xqp.user.mapper.UserMapper;

import java.util.List;

/**
 * 这里是宠物寻主接口实现类
 */

@Service
public class SearchMasterMsgServiceImpl extends BaseServiceImpl<SearchMasterMsg> implements ISearchMasterMsgService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private ShopMapper shopMapper;

    @Autowired
    private EmployeeMapper employeeMapper;

    @Autowired
    private SearchMasterMsgMapper searchMasterMsgMapper;

    @Autowired
    private IPetService petService;

    // 宠物寻主发布
    @Override
    public void publish(SearchMasterMsg smm, Long LogininfoId) {

        // 通过LogininfoId获取到user对象
         User user = userMapper.loadByLogininfoId(LogininfoId);
        // 将user对象存入smm
        smm.setUser(user);
        // 将user对象的id存入smm
        smm.setUser_id(user.getId());
        // 查询所有的店铺
        List<Shop> shopsList = shopMapper.loadAll();
        // 获取前端宠物寻主发布的地址
        String address = smm.getAddress();
        // 根据百度地图提供的工具获取前端宠物寻主发布的地址的经纬度
        Point point = DistanceUtil.getPoint(address);
        // 获取离发布地址最近的店铺
        Shop nearestShop = DistanceUtil.getNearestShop(point, shopsList);
        smm.setShop(nearestShop);
        smm.setShop_id(nearestShop.getId());
        searchMasterMsgMapper.add(smm);
    }

    /**
     * 待处理
     * @param searchMasterMsgQuery
     * @param logininfoId
     * @return
     */
    @Override
    public PageList<SearchMasterMsg> pending(SearchMasterMsgQuery query, Long logininfoId) {
        // 通过请求头中的登录对象信息中的logininfoId获取到对应的employee对象
        Employee employee = employeeMapper.findByLogininfoId(logininfoId);
        // 判断employee是店铺员工还是平台员工
        if (employee.getShop_id()!= null){ // 通过了就是店铺员工
            query.setShopId(employee.getShop_id()); // 因为是店铺员工所以后天查询发布的宠物寻主要根据店铺id为条件查询，当然如果是平台员工就直接查询所有的待处理
        }//没通过就是平台员工
        query.setState(0); // 0代表未处理，就代表我们要在数据库中查询所有的待处理发布信息
        // 调父类
        PageList<SearchMasterMsg> pageList = super.queryList(query);

        return pageList;
    }

    /**
     * 已处理
     * @param searchMasterMsgQuery
     * @param logininfoId
     * @return
     */
    @Override
    public PageList<SearchMasterMsg> processed(SearchMasterMsgQuery query, Long logininfoId) {
        // 通过请求头中的登录对象信息中的logininfoId获取到对应的employee对象
        Employee employee = employeeMapper.findByLogininfoId(logininfoId);
        // 判断employee是店铺员工还是平台员工
        if (employee.getShop_id()!= null){ // 通过了就是店铺员工
            query.setShopId(employee.getShop_id()); // 因为是店铺员工所以后天查询发布的宠物寻主要根据店铺id为条件查询，当然如果是平台员工就直接查询所有的待处理
        }//没通过就是平台员工
        query.setState(1); // 1代表已处理，就代表我们要在数据库中查询所有的待处理发布信息
        // 调父类
        PageList<SearchMasterMsg> pageList = super.queryList(query);
        return pageList;
    }

    /**
     * 处理宠物寻主发布
     * @param pet
     * @param id
     */
    @Override
    public void handler(Pet pet, Long logininfoId) {
        //处理宠物寻主发布所以要改变searchmastermsg的状态  从未处理改为已处理就是将state改为1
        // 通过search_master__msg_idsearch_master__msg_id
        searchMasterMsgMapper.updateStateById(pet.getSearch_master_msg_id());
        //pet和petdetail表中存值
        petService.insert(pet);
    }


//    private PetAcquisitionOrder pet2order(Pet pet, SearchMasterMsg adopt) {
//        PetAcquisitionOrder order = new PetAcquisitionOrder();
//        order.setDigest("[摘要]对"+pet.getName()+"收购订单！");
//        order.setState(0);//待支付
//        order.setPrice(pet.getCostprice());
//        order.setAddress(adopt.getAddress());
//        String orderSn = CodeGenerateUtils.generateOrderSn(adopt.getUser_id());
//        order.setOrderSn(orderSn);
//        order.setPet_id(pet.getId());
//        order.setUser_id(adopt.getUser_id());
//        order.setPaytype(0);
//        order.setShop_id(pet.getShop_id());
//        order.setEmp_id(EmployeeContext.getLoginEployee().getId());
//        return order;
//    }
}
